로딩 중이에요... 🐣
31 Djoser 를 활용한 인증 시스템 구축 & JWT 및 토큰 인증 베스트 프랙티스 | ✅ 편저: 코담 운영자
31-Djoser 를 활용한 인증 시스템 구축 & JWT 및 토큰 인증 베스트 프랙티스
- Djoser를 활용한 인증 시스템 구축 & JWT 베스트 프랙티스🔗 djoser-github
🔗 djoser-공식문서
1. djoser READEME.md
djoser 소개
Djoser는 Django의 인증 시스템을 Django REST Framework 기반의 REST API로 구현한 라이브러리입니다. 회원가입, 로그인, 로그아웃, 비밀번호 재설정, 계정 활성화 등 기본적인 인증 관련 작업을 위한 다양한 view를 제공합니다. 또한 커스텀 사용자 모델과도 잘 호환됩니다.
주요 지원 기능
-
토큰 기반 인증 (Token-based authentication)
-
JWT 인증 (JWT authentication)
-
소셜 로그인 (Social authentication)
-
WebAuthn 지원
기존 Django의 인증 관련 클래스(예: PasswordResetForm
)를 그대로 재사용하는 대신, 싱글 페이지 애플리케이션(SPA) 구조에 더 잘 맞도록 몇몇 부분을 직접 재구현했습니다.
이 프로젝트는 SUNSCRAPERS가 열정과 인내로 개발했습니다.
데모 보기: https://asciinema.org/a/94J4eG2tSBD2iEfF30a6vGtXw.png
1.시스템 요구 사항
Djoser를 사용하려면 다음 환경을 갖추어야 합니다:
-
Python 3.9 이상, 4.0 미만 (3.10, 3.11, 3.12 포함)
-
Django 3.0 이상 (3.2부터 5.1까지 지원)
-
Django REST Framework 3.12 이상
2.설치 방법
pip 명령어를 사용해 간단히 설치할 수 있습니다:
pip install djoser
설치 후, 공식 문서의 설정 가이드를 참고하여 추가 설정을 진행하세요.
3.공식 문서
자세한 사용법과 설정 방법은 아래 문서에서 확인할 수 있습니다:
-
프로젝트 내
docs
디렉토리
4.개발 및 기여 가이드
Djoser에 기여하고 싶다면 다음 절차를 따라주세요:
git clone git@github.com:sunscrapers/djoser.git
cd djoser
poetry install --all-extras
위 명령어를 통해 개발에 필요한 의존성 패키지가 포함된 가상 환경이 생성됩니다.
테스트 실행:
poetry run pytest
Makefile을 통해 다음 명령어로 초기화 및 테스트 자동화도 가능합니다:
make init
make test
가상 환경 활성화:
poetry shell
poetry 없이 설치할 경우
신형 pip는 pyproject.toml
을 이용한 빌드를 지원합니다:
pip install .[test]
cd testproject
./manage.py test
5.예제 프로젝트 실행
테스트용 예제 프로젝트를 실행하려면 다음 명령어를 사용하세요:
make migrate
make runserver
6.커밋 전 사전 작업
코드 변경 사항을 커밋하기 전에 pre-commit
을 설정해 주세요:
poetry run pre-commit install
이 설정을 통해 커밋 전에 다음과 같은 코드 품질 검사가 자동으로 수행됩니다:
-
Black (코드 포매팅)
-
Ruff (정적 분석)
-
Docformatter (문서 문자열 포매팅)
7.관련 프로젝트
Django, REST, 인증과 관련된 프로젝트:
-
django-rest-registration
-
django-oauth-toolkit
주의사항
커스텀 인증 로직과 TokenCreateSerializer
를 사용하는 경우, authenticate()
가 명시적으로 None
을 반환하더라도 내부 로직에서 사용자 검색을 시도할 수 있습니다. 이 부분은 향후 변경될 수 있습니다.
2. 강의 내용
1. Djoser란?
Djoser는 Django의 기본 인증 시스템을 RESTful 방식으로 제공하는 라이브러리입니다. React, Vue.js, React Native 등 SPA(Single Page Application) 프론트엔드와 Django 백엔드 간 인증 처리를 쉽게 해주는 패키지입니다.
제공 기능
- 회원가입 / 로그인 / 로그아웃
- 비밀번호 초기화 / 변경
- 이메일 인증
- 토큰 기반 인증 및 JWT 인증
- 소셜 로그인 지원
2. 설치 및 기본 설정
1단계. 필수 패키지 설치
pip install djoser djangorestframework djangorestframework-simplejwt django-cors-headers
2단계. settings.py 설정
INSTALLED_APPS = [
...
'rest_framework',
'rest_framework.authtoken',
'djoser',
'corsheaders',
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
...
]
# CORS 허용 설정 (React 개발 서버 기준)
CORS_ALLOWED_ORIGINS = [
'http://localhost:5173',
]
# 인증 클래스 설정
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication', # 또는 'rest_framework_simplejwt.authentication.JWTAuthentication'
],
}
# 이메일 콘솔 출력
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
3단계. URL 설정
from django.urls import path, include
urlpatterns = [
path('auth/', include('djoser.urls')),
path('auth/', include('djoser.urls.authtoken')), # 토큰 인증
path('auth/', include('djoser.urls.jwt')), # JWT 인증
]
3. 인증 방식 비교 및 사용
✅ 토큰 인증 (Token Authentication)
/auth/token/login/
: 로그인, 토큰 반환/auth/token/logout/
: 로그아웃 (DB에서 토큰 삭제)/auth/users/me/
: 로그인한 사용자 정보 조회
장점
- 설정 간단, 사용 편리
- 서버 측에서 토큰을 저장하므로 토큰 취소가 용이
단점
- DB 쿼리가 매 요청마다 필요 (토큰 유효성 확인 시)
✅ JWT 인증 (Simple JWT)
/auth/jwt/create/
: 로그인, access/refresh 토큰 반환/auth/jwt/refresh/
: refresh 토큰으로 access 토큰 갱신/auth/jwt/verify/
: 토큰 유효성 검증
장점
- 무상태 인증 방식 (stateless): 매 요청마다 DB 조회 불필요
- 성능 향상, 확장성 우수
단점
- 토큰 만료 전까지 수동 로그아웃 어려움 (Blacklist 필요 시 DB 설정 필요)
✅ 인증 요청 예시 (JWT)
POST /auth/jwt/create/
Content-Type: application/json
{
"username": "admin",
"password": "test"
}
응답:
{
"access": "...",
"refresh": "..."
}
요청 헤더에 아래처럼 사용:
Authorization: JWT {access_token}
4. 커스터마이징
Djoser는 기본 제공되는 시리얼라이저를 오버라이드하여 사용자 정의 로직을 추가할 수 있습니다.
DJOSER = {
'SERIALIZERS': {
'user': 'myapp.serializers.CustomUserSerializer',
}
}
- 예: 사용자 등록 시 추가 필드 요구, 응답 형식 변경 등
5. 실전 적용 팁
- 클라이언트(React 등)는 로그인 후 받은 토큰을 localStorage/sessionStorage에 저장하고, 요청 시 Authorization 헤더에 첨부
- Access token 만료 시 Refresh token으로 재발급 → 401 처리 대응 로직 필요
- 로그아웃 시 토큰 제거 (Token 방식: 서버에서 삭제, JWT: 클라이언트에서 무효화 or Blacklist)
마무리
Djoser는 Django REST Framework에서 인증 기능을 빠르고 안전하게 구현할 수 있는 강력한 도구입니다. SPA와 백엔드 간 인증 연동을 단순화하며, 기본적인 인증 시나리오부터 JWT 기반 고급 인증까지 폭넓게 지원합니다.
더욱 자세한 내용은 Djoser 공식 문서를 참고하세요.
다음 문서에서는 React 프론트엔드와의 연동 예제를 다룰 예정입니다.